/**
 * @author guanhao 观浩
 * @version 1.0.0.0
 * @createTime 2023/2/19 9:04 AM
 * @company Michale Squirrel
 * @link
 * @description
 */
public class LeetCode6359 {


//    给你一个整数 num 。你知道 Danny Mittal 会偷偷将 0 到 9 中的一个数字 替换 成另一个数字。
//
//    请你返回将 num 中 恰好一个 数字进行替换后，得到的最大值和最小值的差位多少。
//
//    注意：
//
//    当 Danny 将一个数字 d1 替换成另一个数字 d2 时，Danny 需要将 nums 中所有 d1 都替换成 d2 。
//    Danny 可以将一个数字替换成它自己，也就是说 num 可以不变。
//    Danny 可以将数字分别替换成两个不同的数字分别得到最大值和最小值。
//    替换后得到的数字可以包含前导 0 。
//    Danny Mittal 获得周赛 326 前 10 名，让我们恭喜他。
//    1 <= num <= 108
    public int minMaxDifference(int num) {
        if (num == 0) {
            return 9;
        }
        int[] array = new int[8];
        for (int i = 0; i < array.length; i++) {
            array[i] = -1;
        }
        int numCopy = num;
        int currentIndex = 7;
        while (numCopy > 0) {
            array[currentIndex] = numCopy % 10;
            currentIndex--;
            numCopy = numCopy / 10;
        }
        int first = -1;
        int[] max = new int[8];
        int[] min = new int[8];
        for (int i = 0; i < max.length; i++) {
            max[i] = array[i];
            min[i] = array[i];
        }
        for (int i = 0; i < array.length; i++) {
            if (array[i] > 0 && first == -1) {
                if (array[i] == 9 && array[i + 1] == 0) {
                    first = 9;
                    break;
                }
                if (array[i] != 9) {
                   first =  array[i] ;
                }
            }

        }
        for (int i = 0; i < array.length; i++) {

            if (first > -1 && array[i]>-1&& array[i] == first) {
                max[i] = 9;
                min[i] = 0;
            }
        }
        int delta = 0;
        for (int i = 0; i < max.length; i++) {
            if (max[i] > -1) {
                delta += (max[i] - min[i]) *Math.pow (10,7 - i);
            }
        }
        return delta;
    }


    public int minMaxDifference2(int num) {

        if (num == 0) {
            return 9;
        }
        int[] array = new int[8];
        int numCopy = num;
        int currentIndex = 7;
        while (numCopy > 0) {
            array[currentIndex] = numCopy % 10;
            currentIndex--;
            numCopy = numCopy / 10;
        }
        int first = 0;
        int[] max = new int[8];
        int[] min = new int[8];
        for (int i = 0; i < max.length; i++) {
            max[i] = array[i];
            min[i] = array[i];
        }
        for (int i = 0; i < array.length; i++) {
            if (array[i] > 0 && first == 0) {
                first = array[i];
            }
            if (first > 0 && array[i] == first) {
                max[i] = 9;
                min[i] = 0;
            }
        }
        int delta = 0;
        for (int i = 0; i < max.length; i++) {
            delta += (max[i] - min[i]) *Math.pow (10,7 - i);
        }
        return delta;
    }

    public static void main(String[] args) {
        LeetCode6359 leetCode6359 = new LeetCode6359();
        System.out.println(leetCode6359.minMaxDifference(11891));
        System.out.println(leetCode6359.minMaxDifference(90));
    }



}
